home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CICA 1993 April
/
CICA MS Windows - April 1993.iso
/
unzipped
/
programr
/
dpmi_lib
/
dpmi_v2.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-06
|
2KB
|
75 lines
/* This file is DPMI_V2.C
**
** this program shows allocating memory in the DPMI-enviroment
** compile with smallmodel,protected mode instuctions
** link with dpmiutil.obj
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "DPMI.H"
#include <dos.h>
typedef struct node {
unsigned long num;
void far *data ;
struct node far *next ;
} NODE ;
void protected_program()
{
FREEMEMINFO free;
NODE far *p,far *q;
unsigned long nodes=0;
unsigned nodesize ;
time_t t1,t2;
getfreeinfo(&free);
printf("\n");
printfreeinfo(&free);
printf("\nSet NodeSize (try 4092) : ");
scanf("%lu",&nodesize);
time(&t1);
for (q= NULL ;;q->next =p) {
p=q ;
if ((q=extmalloc(sizeof(NODE)))== NULL)
break;
if ((q->data=extmalloc((DWORD)nodesize))==NULL) {
extfree(q);
break;
}
q->num=nodes++;
}
printf("\n%lu nodes ; %lu seconds\n",nodes,time(&t2)-t1);
printf("Allocated %lu KB\n", (nodes* ((DWORD)nodesize)+sizeof(NODE))>>10 );
getfreeinfo(&free);
printf("\n");
printfreeinfo(&free);
printf("\nFree descriptor..\n");
time(&t1);
for (;p!=NULL; p=q) {
q=p->next;
if (p->num != --nodes)
printf("list corrupt: nodes=%lu num=%lu\n",nodes,p->num);
extfree(p->data);
extfree(p);
}
time(&t2);
printf("..end\n");
printf("%lu seconds\n",t2-t1);
}
void main()
{
real_to_protected();
protected_program();
protected_to_real();
}